package com.weaving.monitor.mapper;

import com.weaving.monitor.entity.Machine;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 经编机数据访问接口
 * 
 * 功能说明：
 * 1. 定义与经编机相关的数据库操作接口
 * 2. 提供CRUD（增删改查）操作
 * 3. 支持按条件查询机器信息
 * 
 * 注解说明：
 * - @Mapper: MyBatis注解，标识这是一个Mapper接口
 * - @Param: 用于标注方法参数，在XML映射文件中可以通过参数名引用
 * 
 * 接口方法说明：
 * 1. selectAllMachines: 查询所有机器信息，用于首页展示
 * 2. selectByMachineNumber: 根据机器号查询特定机器，用于详情页面
 * 3. insertMachine: 插入新机器信息，用于添加新机器
 * 4. updateMachine: 更新机器信息，用于修改机器状态
 * 5. deleteMachine: 删除机器信息，用于移除机器
 * 6. selectRunningMachines: 查询运行中的机器，用于统计
 * 7. selectErrorMachines: 查询故障机器，用于告警
 * 
 * 对应的XML映射文件：MachineMapper.xml
 * 
 * @author 系统开发团队
 * @version 1.0
 * @since 2024-01-01
 */
@Mapper
public interface MachineMapper {
    
    /**
     * 查询所有机器信息
     * 
     * 功能说明：
     * 1. 从machines_dashboard表中查询所有机器记录
     * 2. 返回完整的机器信息列表
     * 3. 主要用于首页展示所有机器的状态
     * 
     * @return 所有机器信息的列表
     */
    List<Machine> selectAllMachines();
    
    /**
     * 根据机器号查询机器信息
     * 
     * 功能说明：
     * 1. 根据指定的机器号查询特定机器
     * 2. 用于获取单个机器的详细信息
     * 3. 支持机器详情页面的数据展示
     * 
     * @param machineNumber 机器编号
     * @return 指定机器的信息，如果不存在则返回null
     */
    Machine selectByMachineNumber(@Param("machineNumber") Integer machineNumber);
    
    /**
     * 插入机器信息
     * 
     * 功能说明：
     * 1. 向machines_dashboard表中插入新的机器记录
     * 2. 用于添加新的经编机到系统中
     * 3. 返回影响的行数，通常为1表示插入成功
     * 
     * @param machine 要插入的机器信息对象
     * @return 影响的行数，1表示插入成功，0表示插入失败
     */
    int insertMachine(Machine machine);
    
    /**
     * 更新机器信息
     * 
     * 功能说明：
     * 1. 更新machines_dashboard表中的机器记录
     * 2. 用于修改机器的状态、速度、布长等信息
     * 3. 根据机器编号进行更新操作
     * 
     * @param machine 包含更新信息的机器对象
     * @return 影响的行数，1表示更新成功，0表示更新失败
     */
    int updateMachine(Machine machine);
    
    /**
     * 删除机器信息
     * 
     * 功能说明：
     * 1. 从machines_dashboard表中删除指定的机器记录
     * 2. 根据机器编号进行删除操作
     * 3. 用于移除不再使用的机器
     * 
     * @param machineNumber 要删除的机器编号
     * @return 影响的行数，1表示删除成功，0表示删除失败
     */
    int deleteMachine(@Param("machineNumber") Integer machineNumber);
    
    /**
     * 查询运行中的机器
     * 
     * 功能说明：
     * 1. 查询状态为"RUNNING"的机器
     * 2. 用于统计当前运行中的机器数量
     * 3. 支持生产状态监控和统计
     * 
     * @return 运行中机器的列表
     */
    List<Machine> selectRunningMachines();
    
    /**
     * 查询故障机器
     * 
     * 功能说明：
     * 1. 查询状态为"ERROR"的机器
     * 2. 用于故障告警和维修管理
     * 3. 支持故障统计和监控
     * 
     * @return 故障机器的列表
     */
    List<Machine> selectErrorMachines();
    
    /**
     * 删除所有机器数据
     * 
     * 功能说明：
     * 1. 清空machines_dashboard表中的所有数据
     * 2. 用于定时任务中的数据刷新
     * 3. 在重新插入数据前清空旧数据
     * 
     * @return 影响的行数
     */
    int deleteAll();
    
    /**
     * 插入机器信息（简化版）
     * 
     * 功能说明：
     * 1. 向machines_dashboard表中插入新的机器记录
     * 2. 用于定时任务中的批量插入
     * 
     * @param machine 要插入的机器信息对象
     * @return 影响的行数
     */
    int insert(Machine machine);
} 